/*
Orientação a Objetos em Javascript é muito diferente das demais linguagens.
Declare o construtor como function NomeDaClasse(param1, param2){...}
Declare os métodos como NomeDaClasse.prototype.nomeDoMetodo = function(params){}
*/

globalSelectedPartida = null;
globalSelectedPartidaElement = null;

function Partida(id, rodada, horaPlanejada, horaRealizada, publicoPagante, rendaTotal, duracaoT1, duracaoT2, estadio, timeCasa, timeVisitante){
    this.id = id;
    this.rodada = rodada;
    this.id_clube_casa = timeCasa;
    this.id_clube_visitante = timeVisitante;
    this.hora_planejada = (horaPlanejada == 'null') ? null : convertDatetimeFromDatabaseFormat(horaPlanejada);
    this.hora_realizada = (horaRealizada == 'null') ? null : convertDatetimeFromDatabaseFormat(horaRealizada);
    this.publico_pagante = (publicoPagante == 'null') ? null : publicoPagante;
    this.renda_total = (rendaTotal == 'null') ? null : rendaTotal;
    this.duracao_t1 = (duracaoT1 == 'null') ? null : duracaoT1;
    this.duracao_t2 = (duracaoT2 == 'null') ? null : duracaoT2;
    this.id_estadio = estadio;
}

Partida.prototype.getKey = function(){
    return "partida_"+this.id;
}

Partida.prototype.createItem = function(){
    var item = document.createElement('DIV');
    item.className = 'item';
    
    //Finalizando o item
    item.addEventListener('click', requestPartidaData, true);
    item.setAttribute('DATA-KEY', this.getKey());
    
    var score = this.returnScore();
    
    var homeClub = this.createClubInfo('homeClub', score.homeClub);
    var visitorClub = this.createClubInfo('visitorClub', score.visitorClub);

    item.appendChild(homeClub);
    item.appendChild(visitorClub);
    
    /*
    if(this.hora_realizada == null || dateHasPassed(this.hora_realizada)){
        var avisoNaoRealizada = document.createElement('DIV');
        avisoNaoRealizada.appendChild(document.createTextNode('Esta partida ainda não foi realizada'));
        item.appendChild(avisoNaoRealizada);
    }
    */
    
    return item;
}

Partida.prototype.createClubInfo = function(className, stringClubScore){
    var club = document.createElement('DIV');
    club.className = className;
    var clubName = document.createElement('p');
    clubName.className = 'name';
    
    var clubId = (className == 'visitorClub') ? this.id_clube_visitante : this.id_clube_casa;
    
    var stringClubName = globalClubes['clube_'+clubId].nome;
    clubName.appendChild(document.createTextNode(stringClubName));
    
    var clubScore = document.createElement('p');
    clubScore.className = 'score';
    clubScore.appendChild(document.createTextNode(stringClubScore));
    
    club.appendChild(clubName);
    club.appendChild(clubScore);
    
    return club;
}

Partida.prototype.returnScore = function(){
    var scoreClubeCasa, scoreClubeVisitante;
    scoreClubeCasa = scoreClubeVisitante = 0;
    
    var golsByPartida = globalGolsByPartida[this.getKey()];
    
    for(var key in golsByPartida){
        var gol = golsByPartida[key];
        if(gol.id_clube == this.id_clube_casa) scoreClubeCasa++;
        else if(gol.id_clube == this.id_clube_visitante) scoreClubeVisitante++;
    }
    
    return {homeClub: scoreClubeCasa, visitorClub: scoreClubeVisitante};
}

Partida.prototype.createDataClubItem = function(className){
    var dataClubItem = document.createElement('DIV');
    
    var clubId = (className == 'visitorClub') ? this.id_clube_visitante : this.id_clube_casa;
    
    var cardsElement = document.createElement('DIV');
    cardsElement.className = 'cards';
    
    var cartoesByPartida = globalCartoesByPartida[this.getKey()];
    for(var key in cartoesByPartida){
        
        var card = cartoesByPartida[key];
        var jogadorId = card.id_jogador;
        var jogador = globalJogadores['jogador_'+jogadorId];
        
        if(jogador.clube == clubId){
            var cardElement = document.createElement('P');
            if(card.tipo == 0) cardElement.className = 'card yellow';
            else if(card.tipo == 1) cardElement.className = 'card red';

            var nomeJogador = jogador.nome;
            cardElement.appendChild(document.createTextNode(nomeJogador+" "+card.minuto+"' "+card.tempo+"º Tempo "));

            cardsElement.appendChild(cardElement);
        }
    }
    
    var substitutionsElement = document.createElement('DIV');
    substitutionsElement.className = 'substitutions';
    
    var substituicoesByPartida = globalSubstituicoesByPartida[this.getKey()];
    for(var key in substituicoesByPartida){
        
        var substituicao = substituicoesByPartida[key];
        var jogadorEntrouId = substituicao.id_jogador_entrou;
        var jogadorEntrou = globalJogadores['jogador_'+jogadorEntrouId];
        
        if(jogadorEntrou.clube == clubId){
            var substitutionElement = document.createElement('P');
            substitutionElement.className = 'substitution';

            var nomeJogadorEntrou = jogadorEntrou.nome;
            var nomeJogadorSaiu = globalJogadores['jogador_'+substituicao.id_jogador_saiu].nome;
            substitutionElement.innerHTML = "<SPAN class='in'>"+nomeJogadorEntrou+"</span>  <SPAN class='out'>"+nomeJogadorSaiu+"</span> "+substituicao.minuto+"' "+substituicao.tempo+"º Tempo ";
            substitutionsElement.appendChild(substitutionElement);
        }
    }
    
    var goalsElement = document.createElement('DIV');
    goalsElement.className = 'goals';
    
    var golsByPartida = globalGolsByPartida[this.getKey()];
    for(var key in golsByPartida){
        
        var gol = golsByPartida[key];
        
        if(gol.id_clube == clubId){
            var goalElement = document.createElement('P');
            goalElement.className = 'goal';

            var jogador = globalJogadores['jogador_'+gol.id_jogador];
            goalElement.appendChild(document.createTextNode(jogador.nome+" "+gol.minuto+"' "+gol.tempo+"º Tempo "));
            
            if(gol.id_clube != jogador.clube) goalElement.className += " own";
            
            goalsElement.appendChild(goalElement);
        }
    }
    
    dataClubItem.appendChild(cardsElement);
    dataClubItem.appendChild(substitutionsElement);
    dataClubItem.appendChild(goalsElement);
    
    return dataClubItem;
}

function requestPartidaData(event){
    var itemPartida = event.target;
    while(itemPartida.className != 'item') itemPartida = itemPartida.parentNode;
    
    if(!itemPartida.getAttribute('DATA-OPEN')){
        itemPartida.setAttribute('DATA-OPEN', 'open');
        globalSelectedPartidaElement = itemPartida;
        var key = itemPartida.getAttribute('DATA-KEY');
        globalSelectedPartida = globalPartidas[key];
        preloaderAnimation();

        var parameters = new Array();
        parameters['request'] = 'cartoesPartida,substituicoesPartida';
        parameters['partida'] = globalSelectedPartida.id;

        var communicator = new Communicator();
        communicator.addParametersList(parameters);
        communicator.sendRequest(receiveRequestPartidaDataHandler); 
    }
}

function receiveRequestPartidaDataHandler(response){
    var responseObj = eval(response);

    receiveCartoesHandler(responseObj[0]);
    receiveSubstituicoesHandler(responseObj[1]);
    
    var homeClubEl = globalSelectedPartidaElement.getElementsByClassName('homeClub')[0];
    var visitorClubEl = globalSelectedPartidaElement.getElementsByClassName('visitorClub')[0];
    
    homeClubEl.appendChild(globalSelectedPartida.createDataClubItem('homeClub'));
    visitorClubEl.appendChild(globalSelectedPartida.createDataClubItem('visitorClub'));
    
    preloaderAnimation();
}